﻿using GDM.Hogar.Entidades;
using GDM.Hogar.Repositorios.Contratos;
using GDM.Hogar.Repositorios.Core;
using GDM.Hogar.Repositorios.Soporte;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace GDM.Hogar.Repositorios
{
    public class AgenteRepositorio : Repositorio, IAgenteRepositorio
    {
        public AgenteRepositorio(IDbManager dbManager)
            : base(dbManager)
        {
        }

        protected override string ProcActualizar
        {
            get
            {
                return ProcedimientosAlmacenados.Agente.Actualizar;
            }
        }

        public void ActivarAgente(int agenteId, bool activo)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@AgenteId", DbType.Int64, ParameterDirection.Input, agenteId));
            parametros.Add(CrearParametro("@Activo", DbType.Boolean, ParameterDirection.Input, activo));
            EjecutarConsulta(ProcedimientosAlmacenados.Agente.Activar, parametros);
        }

        public void ActualizarAgente(Agente agente)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@AgenteId", DbType.Int64, ParameterDirection.Input, agente.AgenteId));
            parametros.Add(CrearParametro("@Dni", DbType.String, ParameterDirection.Input, agente.Dni));
            parametros.Add(CrearParametro("@Nombre", DbType.String, ParameterDirection.Input, agente.Nombre));
            parametros.Add(CrearParametro("@Apellido", DbType.String, ParameterDirection.Input, agente.Apellido));
            parametros.Add(CrearParametro("@Telefono", DbType.String, ParameterDirection.Input, agente.Telefono));
            parametros.Add(CrearParametro("@Domicilio", DbType.String, ParameterDirection.Input, agente.Domicilio));
            parametros.Add(CrearParametro("@AreaId", DbType.Int64, ParameterDirection.Input, agente.AreaId));
            parametros.Add(CrearParametro("@CargoId", DbType.Int64, ParameterDirection.Input, agente.CargoId));
            parametros.Add(CrearParametro("@PuestoId", DbType.Int64, ParameterDirection.Input, agente.PuestoId));
            Actualizar(parametros);
        }

        public void GuardarAgente(Agente agente)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Dni", DbType.String, ParameterDirection.Input, agente.Dni));
            parametros.Add(CrearParametro("@Nombre", DbType.String, ParameterDirection.Input, agente.Nombre));
            parametros.Add(CrearParametro("@Apellido", DbType.String, ParameterDirection.Input, agente.Apellido));
            parametros.Add(CrearParametro("@Telefono", DbType.String, ParameterDirection.Input, agente.Telefono));
            parametros.Add(CrearParametro("@Domicilio", DbType.String, ParameterDirection.Input, agente.Domicilio));
            parametros.Add(CrearParametro("@AreaId", DbType.Int64, ParameterDirection.Input, agente.AreaId));
            parametros.Add(CrearParametro("@CargoId", DbType.Int64, ParameterDirection.Input, agente.CargoId));
            parametros.Add(CrearParametro("@PuestoId", DbType.Int64, ParameterDirection.Input, agente.PuestoId));
            EjecutarConsulta(ProcedimientosAlmacenados.Agente.Insertar, parametros);
        }

        public Agente ObtenerAgente(string dni)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@Dni", DbType.String, ParameterDirection.Input, dni));
            return Obtener<Agente>(ProcedimientosAlmacenados.Agente.ObtenerPorDni, parametros).FirstOrDefault();
        }

        public Agente ObtenerAgente(int agenteId)
        {
            IList<Parametro> parametros = new List<Parametro>();
            parametros.Add(CrearParametro("@AgenteId", DbType.Int64, ParameterDirection.Input, agenteId));
            return Obtener<Agente>(ProcedimientosAlmacenados.Agente.Obtener, parametros).FirstOrDefault();
        }

        public IList<ConsultaAgente> ObtenerAgentes()
        {
            IList<Parametro> parametros = new List<Parametro>();
            return Obtener<ConsultaAgente>(ProcedimientosAlmacenados.Agente.ObtenerTodos, parametros);
        }

        public IList<ConsultaDocente> ObtenerDocentes()
        {
            IList<Parametro> parametros = new List<Parametro>();
            return Obtener<ConsultaDocente>(ProcedimientosAlmacenados.Agente.ObtenerDocentes, parametros);
        }
    }
}